package inge_soft.gestoriusNuevo.business.service.abstraction;

import java.util.Date;
import java.util.List;

import org.springframework.dao.DataAccessException;

import inge_soft.gestoriusNuevo.persistence.entity.implementation.Categoria;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Estado;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Institucion;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;

/**
 * Interface (representa la abstraccion) de todos los servicios necesarios para
 * manipular Eventos
 * 
 * @author ariel
 *
 */
public interface IServicioEvento {

	/**
	 * obtiene todos los eventos pertenecientes a una determinada institucion
	 * @param institucion de la cual obtener todos los eventos
	 * @return lista con los eventos
	 */
	public List<Evento> obtenerTodosEventos(Institucion institucion) throws DataAccessException;
	
	/**
	 * crea el evento, asociandolo a la institucion
	 * @param institucion a la cual asociar el evento
	 * @param evento a crear
	 */
	public void crearEvento(Institucion institucion, Evento evento) throws DataAccessException;
	
	/**
	 * modifica el evento (que habia sido previamente creado)
	 * @param evento a modificar
	 */
	public void modificarEvento(Evento evento) throws DataAccessException;
	
	
	/**
	 * Da de baja un evento y cancela todas las actividades que tenga
	 * @param evento cancelar
	 */
	public void cancelarEvento(Evento evento) throws DataAccessException;
	
	/**
	 * Obtiene todas las categorias posibles para un evento
	 * @return lista con las categorias
	 */
	public List<Categoria> obtenerTodasCategoriasEventos() throws DataAccessException;
	
	/**
	 * Obtiene todos los estados posibles para un evento
	 * @return lista con los estados
	 */
	public List<Estado> obtenerTodosEstados() throws DataAccessException;


	/**
	 * Otiene la primer fecha de inicio de todos los eventos
	 * 
	 * @return primer fecha inicio
	 */
	public Date primerFechaEventos();
}
